package com.zking;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ScanResult;
import redis.clients.jedis.Tuple;

import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class App {
    public static void main(String[] args) {
        System.out.println("123123");
        //1.定义ip和端口
        String ip = "127.0.0.1";
        int port = 6379;
        //2.创建Jedis对象
        Jedis jedis = new Jedis();
        //3.设置访问密码
        jedis.auth("123456");
        //4.测试
        String ping = jedis.ping();
        System.out.println(ping);
        //5.切换数据库
        String select = jedis.select(3);
        System.out.println(select);



        //String 字符串类型
        //设置
//        jedis.set("name","张三");
//        jedis.set("age","21");
//        jedis.set("sex","男");
//        jedis.expire("sex",5);
//        //获取数据
//        String name = jedis.get("name");
//        System.out.println(name);
//        //判断数据是否存在
//        System.out.println(jedis.exists("sex"));
//        //判断数据类型
//        System.out.println(jedis.type("name"));
//        //计数器操作(原子性)
//        jedis.set("cn","1");
//        //递增,每次+1
//        Long cn = jedis.incr("cn");
//        System.out.println(cn);
//        //递增，可控制的递增次数
//        Long cn1 = jedis.incrBy("cn", 2L);
//        System.out.println(cn1);
//        //递减，每次减1
//        Long cn2 = jedis.decr("cn");
//        System.out.println(cn2);
//        //删除数据
//        jedis.del("name","zge");

        //Hash:适用于存储对象
        //单个存储
//        jedis.hset("student","name","张三");
//        Map<String,String> map = new HashMap<>();
//        map.put("sex","女");
//        map.put("age","21");
//        jedis.hmset("student",map);
        //修改数据
//        jedis.hset("student","name","小七");
//        //判断hash类型中的某一个属性是否存在
//        System.out.println(jedis.hexists("student", "addr"));
//        System.out.println(jedis.del("student", "age"));

//        Set集合：无序，唯一
//        jedis.sadd("names","zs","ls","ww");
//        //获取长度
//        System.out.println(jedis.scard("names"));
//        //循环遍历输出
//        ScanResult<String> name = jedis.sscan("names", "0");
//        name.getResult().forEach(System.out::println);

        //5.ZSet:有序
//        jedis.zadd("goods",89d,"肥皂快乐水");
//        Map<String,Double> map = new HashMap<>();
//        map.put("雪碧",100d);
//        map.put("纯牛马",90d);
//        jedis.zadd("goods",map);

//        ScanResult<Tuple> goods = jedis.zscan("goods", "0");
//        List<Tuple> result = goods.getResult();
//        for (Tuple tuple : result) {
//            System.out.println(tuple.getElement() + "=" + tuple.getScore());
//        }
//        result.sort(Comparator.reverseOrder());
//        for (Tuple tuple : result) {
//            System.out.println(tuple.getElement() + "=" + tuple.getScore());
//        }

        //Redis的主要作用是给数据库做挡箭牌，减清数据库的一个压力
        //击穿：key失效 ：加锁排队
        //雪崩：集中过期 解决方案：加上随机失效时间
    }
}